package com.bkgy.modularbx.slip.service;

import com.bkgy.modularbx.slip.entity.RollData;
import com.bkgy.modularbx.slip.entity.SlipAnalysisResult;
import com.bkgy.modularbx.slip.entity.SlipEvent;

import java.util.List;

/**
 * 轧机打滑检测服务接口
 * 定义打滑检测系统的核心功能
 */
public interface SlipDetectionService {

    /**
     * 分析轧辊数据，检测是否打滑
     *
     * @param rollDataList 轧辊数据列表
     * @return 打滑分析结果
     */
    SlipAnalysisResult analyzeSlip(List<RollData> rollDataList);

    /**
     * 保存打滑事件到数据库
     *
     * @param slipEvent 打滑事件
     */
    void saveSlipEvent(SlipEvent slipEvent);

    /**
     * 获取特定轧辊的打滑事件
     *
     * @param rollId 轧辊ID
     * @return 打滑事件列表
     */
    List<SlipEvent> getSlipEventsByRollId(String rollId);

    /**
     * 获取特定轧辊在指定类别下的打滑次数
     *
     * @param rollId 轧辊ID
     * @param category 类别
     * @return 打滑次数
     */
    long getSlipCountForRoll(String rollId, String category);

    /**
     * 获取所有监控的轧辊ID列表
     *
     * @return 轧辊ID列表
     */
    List<String> getAllMonitoredRolls();

    /**
     * 获取主要监控的轧辊ID列表
     *
     * @return 主要轧辊ID列表
     */
    List<String> getPrimaryMonitoredRolls();

    /**
     * 手动触发轧辊打滑分析
     *
     * @param rollId 轧辊ID
     * @return 分析结果
     */
    SlipAnalysisResult triggerAnalysis(String rollId);

    /**
     * 更新打滑检测阈值配置
     *
     * @param thresholdName 阈值名称
     * @param value 阈值值
     */
    void updateThreshold(String thresholdName, float value);
}